/*==============================================================================
 Routines written by John Gardner - 2003 - 2005
 See www.braemoor.co.uk/software for information about more freeware available.
 ===============================================================================
 Routine to write a session cookie

    Parameters:
        cookieName        Cookie name
        cookieValue       Cookie Value

    Return value:
        true              Session cookie written successfullly
        false             Failed - persistent cookies are not enabled

    e.g.
        if (writeSessionCookie("pans","drizzle") then
           alert ("Session cookie written");
        else
           alert ("Sorry, Session cookies not enabled");
*/
function writeSessionCookie (cookieName, cookieValue) {
    if (testSessionCookie()) {
        document.cookie = escape(cookieName) + "=" + escape(cookieValue) + "; path=/";
        return true;
    }
    return false;
}

/*==============================================================================
 Routine to get the current value of a cookie

    Parameters:
        cookieName        Cookie name

    Return value:
        false             Failed - no such cookie
        value             Value of the retrieved cookie

    e.g.
        if (!getCookieValue("pans") then  {
           cookieValue = getCoookieValue ("pans2);
        }
*/
function getCookieValue (cookieName) {
    var exp = new RegExp (escape(cookieName) + "=([^;]+)");
    if (exp.test (document.cookie + ";")) {
        exp.exec (document.cookie + ";");
        return unescape(RegExp.$1);
    }
    return false;
}

/*==============================================================================
 Routine to see if session cookies are enabled

    Parameters:
        None

    Return value:
        true              Session cookies are enabled
        false             Session cookies are not enabled

    e.g.
        if (testSessionCookie())
           alert ("Session coookies are enabled");
        else
           alert ("Session coookies are not enabled");
*/
function testSessionCookie () {
    document.cookie ="testSessionCookie=Enabled";
    if (getCookieValue("testSessionCookie") == "Enabled")
        return true;
    else
        return false;
}

/*==============================================================================
 Routine to see of persistent cookies are allowed:

    Parameters:
        None

    Return value:
        true              Session cookies are enabled
        false             Session cookies are not enabled

    e.g.
        if (testPersistentCookie()) then
           alert ("Persistent coookies are enabled");
        else
           alert ("Persistent coookies are not enabled");
*/
function testPersistentCookie () {
    writePersistentCookie ("testPersistentCookie", "Enabled", "minutes", 1);
    if (getCookieValue ("testPersistentCookie")=="Enabled")
        return true;
    else 
        return false;
}

/*==============================================================================
 Routine to write a persistent cookie

    Parameters:
        CookieName        Cookie name
        CookieValue       Cookie Value
        periodType        "years","months","days","hours", "minutes"
        offset            Number of units specified in periodType

    Return value:
        true              Persistent cookie written successfullly
        false             Failed - persistent cookies are not enabled

    e.g.
        writePersistentCookie ("Session", id, "years", 1);
*/
function writePersistentCookie (CookieName, CookieValue, periodType, offset) {    
    var expireDate = new Date ();
    offset = offset / 1;    
    var myPeriodType = periodType;
    switch (myPeriodType.toLowerCase()) {
        case "years": 
            var year = expireDate.getYear();
            // Note some browsers give only the years since 1900, and some since 0.
            if (year < 1000) year = year + 1900;
            expireDate.setYear(year + offset);
            break;
        case "months":
            expireDate.setMonth(expireDate.getMonth() + offset);
            break;
        case "days":
            expireDate.setDate(expireDate.getDate() + offset);
            break;
        case "hours":
            expireDate.setHours(expireDate.getHours() + offset);
            break;
        case "minutes":
            expireDate.setMinutes(expireDate.getMinutes() + offset);
            break;
        default:
            alert ("Invalid periodType parameter for writePersistentCookie()");
            break;
    }    
    document.cookie = escape(CookieName ) + "=" + escape(CookieValue) + "; expires=" + expireDate.toGMTString() + "; path=/";
}

/*==============================================================================
 Routine to delete a persistent cookie

    Parameters:
        CookieName        Cookie name

    Return value:
        true              Persistent cookie marked for deletion

    e.g.
        deleteCookie ("Session");
*/
function deleteCookie (cookieName) {
    if (getCookieValue (cookieName)) writePersistentCookie (cookieName,"Pending delete","years", -1);  
    return true;     
}
